package com.ize.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ize.entity.dto.*;
import com.ize.entity.pojo.Reservation;


import java.util.List;

public interface YuYueService extends IService<Reservation> {

    /**
     * 分页查询预约列表
     * @param query 查询条件
     * @return 分页结果
     */
    Page<Reservation> getReservationPage(ReservationQueryDTO query);

    /**
     * 根据ID获取预约详情
     * @param id 预约ID
     * @return 预约详情
     */
    Reservation getReservationById(Long id);

    /**
     * 创建预约
     * @param reservation 预约信息
     * @return 是否成功
     */
    boolean createReservation(Reservation reservation);

    /**
     * 更新预约信息
     * @param id 预约ID
     * @param reservation 预约信息
     * @return 是否成功
     */
    boolean updateReservation(Long id, Reservation reservation);

    /**
     * 更新预约状态
     * @param id 预约ID
     * @param status 状态
     * @param remark 备注
     * @return 是否成功
     */
    boolean updateReservationStatus(Long id, String status, String remark);

    /**
     * 删除预约
     * @param id 预约ID
     * @return 是否成功
     */
    boolean deleteReservation(Long id);

    /**
     * 批量操作预约
     * @param batchOperation 批量操作参数
     * @return 是否成功
     */
    boolean batchOperateReservation(BatchOperationDTO batchOperation);

    /**
     * 获取可用预约时间段
     * @param query 查询条件
     * @return 可用时间段列表
     */
    List<String> getAvailableTimeSlots(AvailableSlotsQueryDTO query);

    /**
     * 获取预约统计数据
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param doctorId 医生ID
     * @return 统计结果
     */
    ReservationStatisticsDTO getStatistics(String startDate, String endDate, Long doctorId);

    /**
     * 学生预约
     * @param addStudentYuYueDto
     */
    void add(addStudentYuYueDto addStudentYuYueDto);

    List<Reservation> getYu();

    void delete(Integer id);
}
